package com.lx.jdbctemplate;

import com.lx.druid.Demo2;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;
import java.util.Map;

public class JDBCTemplateDemo2 {
    //1. 获取JDBCTemplate 连接池对象
    JdbcTemplate template=new JdbcTemplate(Demo2.getDataSource());
    /**
     * 修改数据
     */
    @Test
    public void test1(){

        //2. 定义sql
        String sql = "update student1 set name='aaaa' where id=3";
        //3. 执行sql
        int count = template.update(sql);
        System.out.println(count);
    }
    /*添加数据
    * */
    @Test
    public void test2(){
        //1. 获取JDBCTemplate对象
        JdbcTemplate template=new JdbcTemplate(Demo2.getDataSource());
        //2. 定义sql
        String sql = "insert into student3  values (default ,?,?,?,?,?,?)";
        //3. 执行sql
        int count = template.update(sql,"峡谷2",45,"男","北京",48,98);
        System.out.println(count);
    }

    /**
     * 删除数据
     */
    @Test
    public void test3(){
        //1. 获取JDBCTemplate对象
        JdbcTemplate template=new JdbcTemplate(Demo2.getDataSource());
        //2. 定义sql
        String sql = "delete from student3 where id=?";
        //3. 执行sql
        int count = template.update(sql,10);
        System.out.println(count);
    }

    /**
     * 查询数据,将结果集封装为map集合
     * 这个方法查询的结果集只能封装一条记录
     * 将列名作为key，将值作为value将这条记录封装为map集合
     */
    @Test
    public void test4(){
        //1. 获取JDBCTemplate对象
        JdbcTemplate template=new JdbcTemplate(Demo2.getDataSource());
        //2. 定义sql
        String sql = "select * from student3 where id=?";
        //3. 执行sql
        Map<String, Object> map = template.queryForMap(sql, 1);
        System.out.println(map);
//        {id=1, name=马云, age=55, sex=男, address= 杭州, math=66, english=78}
    }

    /**
     *查询所有数据,将结果集封装为list集合
     *将每一条记录封装为map集合，再将map集合装载到list集合中
     */
    @Test
    public void test5(){
        //1. 获取JDBCTemplate对象
        JdbcTemplate template=new JdbcTemplate(Demo2.getDataSource());
        //2. 定义sql
        String sql = "select * from student3";
        //3. 执行sql
        List<Map<String, Object>> lists = template.queryForList(sql);
        for (Map<String,Object>list : lists){
            System.out.println(list);
        }
//        [{id=1, name=马云, age=55, sex=男, address= 杭州, math=66, english=78},
//        {id=2, name=马化腾, age=45, sex=女, address=深圳, math=98, english=87},
//        {id=3, name=峡谷2, age=45, sex=男, address=北京, math=48, english=98}]
    }
    /**
     * 查询所有记录，将其封装为Emp对象的list集合 (Emp类定义了数据库中相同的字段)
     */
    @Test
    public void test6(){
        //1. 获取JDBCTemplate对象
        JdbcTemplate template=new JdbcTemplate(Demo2.getDataSource());
        //2. 定义sql
        String sql = "select * from student3";
        //3. 执行sql
        List<Emp> lists=template.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));
        for (Emp emp : lists){
            System.out.println(emp);
        } }
    /**
     * 查询总记录数
     */
    @Test
    public void test7(){
        //1. 获取JDBCTemplate对象
        JdbcTemplate template=new JdbcTemplate(Demo2.getDataSource());
        //2. 定义sql
        String sql = "select count(id)from student3";
        //3. 执行sql
        Object i = template.queryForObject(sql,Long.class);
        System.out.println(i);
    }
}
